<?php
/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of News
 *
 * @author Soul_man
 */
class Sms extends X3_Module_Table {

    public static $errorCodes = array(
        0=>'Отправлено',
        1=>'#1 Недопустимая длина сообщения',
        2=>'#2 Недопустимая длина комманды',
        3=>'#3 Недопустимый Command ID',
        4=>'#4 Неправильный BIND Status для данной команды',
        5=>'#5 ESME Уже в Bound State',
        6=>'#6 Недопустимый Флаг Приоритета',
        7=>'#7 Недопустимый Флаг Зарегистрированной Доставки',
        8=>'#8 Системная Ошибка',
        9=>'#9 Зарезервирован',
       10=>'#A Недопустимый Исходный Адрес',
       11=>'#B Недопустимый Номер Абонента-Получателя',
       12=>'#C Недопустимый Message ID',
       13=>'#D Неудача Bind',
       14=>'#E Недопустимый Пароль',
       15=>'#F Недопустимый System ID',
       16=>'#10 Зарезервирован',
       17=>'#11 Неудача Cancel SM',
       18=>'#12 Зарезервирован',
       19=>'#13 Неудача Replace SM',
       20=>'#14 Заполнена Очередь Сообщений',
       21=>'#15 Недопустимый Service Тип',
       22=>'#16 Зарезервирован',23=>'#17 Зарезервирован',24=>'#18 Зарезервирован',
       25=>'#19 Зарезервирован',26=>'#1A Зарезервирован',27=>'#1B Зарезервирован',
       28=>'#1C Зарезервирован',29=>'#1D Зарезервирован',30=>'#1E Зарезервирован',
       31=>'#1F Зарезервирован',32=>'#20 Зарезервирован',33=>'#21 Зарезервирован',
       34=>'#22 Зарезервирован',35=>'#23 Зарезервирован',36=>'#24 Зарезервирован',
       37=>'#25 Зарезервирован',38=>'#26 Зарезервирован',39=>'#27 Зарезервирован',
       40=>'#28 Зарезервирован','#29 Зарезервирован','#2A Зарезервирован',
       43=>'#2B Зарезервирован','#2C Зарезервирован','#2D Зарезервирован',
       46=>'#2E Зарезервирован','#2F Зарезервирован','#30 Зарезервирован',
       49=>'#31 Зарезервирован','#32 Зарезервирован',
       51=>'#33 Недопустимое количество адресатов',
       52=>'#34 Недопустимое имя Distribution List',
       53=>'#35 Зарезервирован','#36 Зарезервирован','#37 Зарезервирован',
       56=>'#38 Зарезервирован','#39 Зарезервирован','#3A Зарезервирован',
       59=>'#3B Зарезервирован','#3C Зарезервирован','#3D Зарезервирован',
       62=>'#3E Зарезервирован','#3F Зарезервирован',
       64=>'#40 Недопустимый флажок адресата',
       65=>'#41 Зарезервирован',
       66=>'#42 Недопустимый запрос «представление с заменой»',
       67=>'#43 Недопустимые данные поля esm_class',
       68=>'#44 Нельзя Представить в Список Распределения',
       69=>'#45 Неудача submit_sm или submit_multi',
       70=>'#46 Зарезервирован','#47 Зарезервирован',
       72=>'#48 Недопустимый TON Исходного адреса',
       73=>'#49 Недопустимый NPI Исходного адреса',
       74=>'#4A Зарезервирован','#4B Зарезервирован','#4C Зарезервирован',
       77=>'#4D Зарезервирован','#4E Зарезервирован','#4F Зарезервирован',
       80=>'#50 Недопустимый TON Номера Абонента - Получателя',
       81=>'#51 Недопустимый NPI Номера Абонента - Получателя',
       82=>'#52 Зарезервирован',
       83=>'#53 Недопустимое поле system_Тип',
       84=>'#54 Недопустимый флажок replace_if_present',
       85=>'#55 Недопустимое число сообщений',
       86=>'#56 Зарезервирован','#5A Зарезервирован','#5B Зарезервирован',
        3=>'#5C Зарезервирован','#5D Зарезервирован','#5E Зарезервирован',
        3=>'#5F Зарезервирован','#60 Зарезервирован',
        3=>'#61 Недопустимое Назначенное Время Доставки',
        3=>'#62 Недопустимый период достоверности сообщения',
        3=>'#63 Недопустимое Предопределенное Сообщение или Не Найдено',
        3=>'#64 Код Ошибки Временного Приложения Приемника ESME',
        3=>'#65 Код Ошибки Постоянного Приложения Приемника ESME',
        3=>'#66 Код Ошибки Отклонения Сообщения Приемника ESME',
        3=>'#67 Неудача запроса query_sm',
        3=>'#68 Зарезервирован','#69 Зарезервирован','#6A Зарезервирован',
        3=>'#6B Зарезервирован','#6C Зарезервирован','#6D Зарезервирован',
        3=>'#6E Зарезервирован','#6F Зарезервирован','#70 Зарезервирован',
        3=>'#71 Зарезервирован','#72 Зарезервирован','#73 Зарезервирован',
        3=>'#74 Зарезервирован','#75 Зарезервирован','#76 Зарезервирован',
        3=>'#77 Зарезервирован','#78 Зарезервирован','#79 Зарезервирован',
        3=>'#7A Зарезервирован','#7B Зарезервирован','#7C Зарезервирован',
        3=>'#7D Зарезервирован','#7E Зарезервирован','#7F Зарезервирован',
        3=>'#80 Зарезервирован',
        3=>'#81 Зарезервирован','#82 Зарезервирован','#83 Зарезервирован',
        3=>'#84 Зарезервирован','#85 Зарезервирован','#86 Зарезервирован',
        3=>'#87 Зарезервирован','#88 Зарезервирован','#89 Зарезервирован',
        3=>'#8A Зарезервирован','#8B Зарезервирован','#8C Зарезервирован',
        3=>'#8D Зарезервирован','#8E Зарезервирован','#8F Зарезервирован',
        3=>'#90 Зарезервирован',
        3=>'#91 Зарезервирован','#92 Зарезервирован','#93 Зарезервирован',
        3=>'#94 Зарезервирован','#95 Зарезервирован','#96 Зарезервирован',
        3=>'#97 Зарезервирован','#98 Зарезервирован','#99 Зарезервирован',
        3=>'#9A Зарезервирован','#9B Зарезервирован','#9C Зарезервирован',
        3=>'#9D Зарезервирован','#9E Зарезервирован','#9F Зарезервирован',
        3=>'#A0 Зарезервирован',
        3=>'#A1 Зарезервирован','#A2 Зарезервирован','#A3 Зарезервирован',
        3=>'#A4 Зарезервирован','#A5 Зарезервирован','#A6 Зарезервирован',
        3=>'#A7 Зарезервирован','#A8 Зарезервирован','#A9 Зарезервирован',
        3=>'#AA Зарезервирован','#AB Зарезервирован','#AC Зарезервирован',
        3=>'#AD Зарезервирован','#AE Зарезервирован','#AF Зарезервирован',
        3=>'#B0 Зарезервирован',
        3=>'#B1 Зарезервирован','#B2 Зарезервирован','#B3 Зарезервирован',
        3=>'#B4 Зарезервирован','#B5 Зарезервирован','#B6 Зарезервирован',
        3=>'#B7 Зарезервирован','#B8 Зарезервирован','#B9 Зарезервирован',
        3=>'#BA Зарезервирован','#BB Зарезервирован','#BC Зарезервирован',
        3=>'#BD Зарезервирован','#BE Зарезервирован','#BF Зарезервирован',
        3=>'#C0 Ошибка в опционной части PDU Body.',
        3=>'#C1 Не разрешен Optional Parameter',
        3=>'#C2 Недопустимая Длина Параметра',
        3=>'#C3 Отсутствует ожидаемый Optional Parameter',
        3=>'#C4 Недопустимое Значение Опционного Параметра',
        3=>'#C5 Зарезервирован','#C6 Зарезервирован','#C7 Зарезервирован',
        3=>'#C8 Зарезервирован','#C9 Зарезервирован','#CA Зарезервирован',
        3=>'#CB Зарезервирован','#CC Зарезервирован','#CD Зарезервирован',
        3=>'#CE Зарезервирован','#CF Зарезервирован','#D0 Зарезервирован',
        3=>'#D1 Зарезервирован','#D2 Зарезервирован','#D3 Зарезервирован',
        3=>'#D4 Зарезервирован','#D5 Зарезервирован','#D6 Зарезервирован',
        3=>'#D7 Зарезервирован','#D8 Зарезервирован','#D9 Зарезервирован',
        3=>'#DA Зарезервирован','#DB Зарезервирован','#DC Зарезервирован',
        3=>'#DD Зарезервирован','#DE Зарезервирован','#DF Зарезервирован',
        3=>'#E0 Зарезервирован',
        3=>'#E1 Зарезервирован','#E2 Зарезервирован','#E3 Зарезервирован',
        3=>'#E4 Зарезервирован','#E5 Зарезервирован','#E6 Зарезервирован',
        3=>'#E7 Зарезервирован','#E8 Зарезервирован','#E9 Зарезервирован',
        3=>'#EA Зарезервирован','#EB Зарезервирован','#EC Зарезервирован',
        3=>'#ED Зарезервирован','#EE Зарезервирован','#EF Зарезервирован',
        3=>'#F0 Зарезервирован',
        3=>'#F1 Зарезервирован','#F2 Зарезервирован','#F3 Зарезервирован',
        3=>'#F4 Зарезервирован','#F5 Зарезервирован','#F6 Зарезервирован',
        3=>'#F7 Зарезервирован','#F8 Зарезервирован','#F9 Зарезервирован',
        3=>'#FA Зарезервирован','#FB Зарезервирован','#FC Зарезервирован',
        3=>'#FD Зарезервирован',
        3=>'#FE Неудача Доставки (использован для data_sm_resp)',
        255=>'#FF Неизвестная Ошибка',
        1025=>'#401 Нехватка средств на балансе',
    );


    public $encoding = 'UTF-8';

    public $tableName = 'data_sms';

    public $_fields = array(
        'id'=>array('integer[10]','unsigned','primary','auto_increment'),
        'name'=>array('string[255]'),
        'title'=>array('string[255]'),
        'text'=>array('content'),
        'status'=>array('boolean','default'=>'1'),
    );
    
    public function __construct() {
        self::$errorCodes[1025] = 'Нехватка средств на балансе.';
        parent::__construct();
    }
    public static function newInstance($class=__CLASS__) {
        return parent::newInstance($class);
    }
    public static function getInstance($class=__CLASS__) {
        return parent::getInstance($class);
    }
    public static function get($arr=array(),$single=false,$class=__CLASS__) {
        return parent::get($arr,$single,$class);
    }
    public static function getByPk($pk,$class=__CLASS__) {
        return parent::getByPk($pk,$class);
    }
    public function fieldNames() {
        return array(
            'name'=>'ID Шаблона',
            'title'=>'Заголовок',
            'text'=>'Текст СМС',
            'status'=>'Статус',
        );
    }
    
    public function actionResend(){
        if(!isset($_GET['id']) || !($id = $_GET['id'])>0 || NULL===($model = Sms_Stack::getByPk($id)))
            throw new X3_404();
        require_once X3::app()->basePath . '/application/extensions/php-smpp/smppclient.class.php';
        require_once X3::app()->basePath . '/application/extensions/php-smpp/gsmencoder.class.php';
        require_once X3::app()->basePath . '/application/extensions/php-smpp/sockettransport.class.php';
        $config = array('host'=>'89.111.21.7','port'=>'2345','login'=>'eokz','password'=>'62d96e');
        $transport = new SocketTransport(array($config['host']),array($config['port']));
        $transport->setRecvTimeout(10000);
        SmppClient::$system_type = "SMPP";
        $smpp = new SmppClient($transport);
        //Allow debug dump output
        $smpp->debug = true;
        $transport->debug = true;
        // Open the connection
        $transport->open();
        $smpp->bindTransmitter($config['login'],$config['password']);

        $from = new SmppAddress('eksk', SMPP::TON_ALPHANUMERIC);
        $message = $model->text;
        $encodedMessage = GsmEncoder::utf8_to_gsm0338($message);
        $to = new SmppAddress($model->phone, SMPP::TON_INTERNATIONAL,SMPP::NPI_E164);
        $res = 0;
        try{
            $smpp->sendSMS($from, $to, $encodedMessage);
        }catch(SmppException $e){
            $res = $e->getCode();
        }
        $model->status = $res;
        $model->save();
        $this->redirect('/admin/list/module/Sms_Stack');
        exit;
    }
    
    public function actionClearstack(){
        if(!X3::user()->isAdmin())
            throw new X3_404();
        Sms_Stack::delete(array('id'=>array('>'=>'0')));
        $this->redirect('/admin/list/module/Sms_Stack');
    }
    
    public function moduleTitle() {
        return 'СМС Шаблоны';
    }
    
    public function onValidate($attr, &$pass) {
        if($attr == 'text'){
            require_once X3::app()->basePath . '/application/extensions/php-smpp/gsmencoder.class.php';
            if(($c=GsmEncoder::countGsm0338Length($this->$attr))>160){
                $this->addError($attr, '`Текст СМС` не должно быть более 160 символов по GSM кодировке. У Вас же '.$c);
                $pass = false;
            }
        }
        $pass=true;
    }
        
}
?>
